-2

私は 2 つのリストを持っています: 文字列リストと、同じ長さと対応の同じインデックスを持つ二重リストです。すべての文字列を比較し、順序に関係なく同じ文字を含むリストのインデックスを見つけ、両方に対応する最大の double 値を削除する必要があります。

例:

List<string> str= new List<string>();
str.add("efc");
str.add("abc");
str.add("cde");
str.add("cab");
str.add("fbc");

List<double> vlr= new List<double>();
vlr.add(0.1);
vlr.add(0.5);
vlr.add(0.4);
vlr.add(0.2);
vlr.add(0.3);

この場合、"abc" => (0.5) を削除する必要があります。"cab" には同じ文字があり、対応する値が低い =>(0.2) ためです。

この2つの配列のラムダ式はありますか??

私が試したこと:

var distinct = list .Select((str, idx) => new { Str = str, Idx = idx }) 
.GroupBy(pair => new HashSet<char>(pair.Str), HashSet<char>.CreateSetComparer()) 
.Select(grp => grp.OrderBy(p => p.Idx).First()) 
.ToList();
4

3 に答える 3

1

これを解決する1つの方法は次のとおりです。

// Pair the strings with their correspondence values
var pairs = str.Zip(vlr, (s, d) => new {s, d});

// Group using a sorted string, eliminating differences due to character order
var groups = pairs.GroupBy(x => new string(x.s.ToCharArray().OrderBy(c => c).ToArray()));

// For each group, retain the item with the lowest correspondence value 
var filtered = groups.Select(x => x.OrderBy(y => y.d).First().s);
于 2013-05-15T02:35:25.477 に答える
1
var newDict = str.Zip(vlr, (s, d) => new { s, d })
                .GroupBy(x => String.Join("", x.s.OrderBy(y => y)))
                .Select(g => g.OrderBy(x => x.d).First())
                .ToDictionary(x => x.s, x => x.d);
于 2013-05-14T22:02:57.853 に答える