2017-04-14 53 views
0

我有范围MySQLTablesRange。这包括像数据: aa_1 aa_3 aa_2 bb_2 bb_1 bb_3如何从范围中创建配对?

我要像创建对: aa_1 bb_1 aa_2 bb_2 aa_3 bb_3

std.algorithm有方法group,这样做类似的事情,但我不知道如何把它写在代码中。我所做的:

MySQLTablesRange.each!(a => a.split("_")[1].array.group.writeln);

但这是错误的,因为group作品与数组,但不是单一的元素。

任何想法?

回答

1

更新:经过测试 - 我意识到这不是'组'你想要的。但chunkBy。更新了答案以反映这一点。 https://dlang.org/phobos/std_algorithm_iteration.html#chunkBy

你必须告诉chunkBy块如何将数据...

[1,2,3,4,5,6] 
    .sort!((a,b) => a%2 > b%2)  // separate odds n evens 
    .chunkBy!((a,b) => a%2 == b%2); // chunk them so all evens are in one range, odds in another. 

这将创建两个组。一个用奇数,一个用evens。

就你而言,它看起来像你将它们放在每个元素中'_'之后的文本上。

"aa_1 aa_2 aa_3 bb_1 bb_2 bb_3 cc_1" 
    .split(" ") 
    .sort!((a,b) => a[$-1].to!int < b[$-1].to!int) // sort it so _1's are together, _2s are together. etc 
    .chunkBy!((a,b) => a[$-1] == b[$-1]) // chunk them so they're in they're own range 
    .each!writeln; // print each range 

$ rdmd test.d 
["aa_1", "bb_1", "cc_1"] 
["aa_2", "bb_2"] 
["aa_3", "bb_3"] 

理想情况下,你会得到的指数_,之后比较...

+0

而且会是什么,如果我没有aa_1,但aa_123?减$ 1会得到错误的结果... –

+0

是啊,这就是为什么我提到你为了获得'_'的索引并在此之后进行比较。我不能为你写这一切;) –