1

リストの例に基づいてリストのリストを並べ替える方法を知りたいです。私の質問を明確にするための例を次に示します。

["Foo", "Bar", "Something"] 

これはリストの例です。次に、以下に示すリストを並べ替えたいと思います。その中の各リストの先頭だけを見てください。

[["Something", "one", "two", "three"], ["Foo", "four", "five", "six"], 
["Bar", "seven", "eight", "nine"]]

これに:

[["Foo", "four", "five", "six"], ["Bar", "seven", "eight", "nine"],
["Something", "one", "two", "three"]]

ありがとう

編集:

2 つの要素を交換するスワップ関数をマッピングしようとしましたが、ここでは 2 つのリストを扱っているためうまくいきません。

4

3 に答える 3

2

おそらく非常に野蛮なアプローチです:

Prelude> let a = [["Something", "one", "two", "three"], ["Foo", "four", "five", "six"], ["Bar", "seven", "eight", "nine"]]
Prelude> let b = ["Foo", "Bar", "Something"]
Prelude> concatMap (\y -> filter (\(x:xs) -> x == y)  a) b
[["Foo","four","five","six"],["Bar","seven","eight","nine"],["Something","one","two","three"]]
于 2013-09-26T10:46:40.967 に答える
0

リスト内包表記に基づく別の解決策は次のとおりです。

Prelude> let a = [["Something", "one", "two", "three"], ["Foo", "four", "five", "six"], ["Bar", "seven", "eight", "nine"]]
Prelude> let b = ["Foo", "Bar", "Something"]

Prelude> let c = [ y | x<-b, y<-a, x `elem` y ]

[["Foo","four","five","six"],["Bar","seven","eight","nine"],["Something","one","two","three"]]

リスト内包表記の使用方法の詳細については、この章を参照してください: Lyah

于 2013-09-26T19:49:16.057 に答える