2017-04-14 2 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

업데이트 :이 테스트 후 - 나는 당신이 원하는 '그룹'이 아니라는 것을 깨달았습니다. 하지만 덩어리. 이를 반영하도록 답변을 업데이트했습니다. https://dlang.org/phobos/std_algorithm_iteration.html#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. 

... chunkBy에게 있습니다. 하나는 홀수, 하나는 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을했을 경우 어떤 일이있을 것입니다 것? 마이너스 하나는 $에서 잘못된 결과를 얻을 것입니다 ... –

+0

그래, 내가 왜 '_'의 색인을 얻고 그 후에 비교할 언급했다. 나는 너에게 그것을 모두 쓸 수 없다.) –

관련 문제