-2

我有 2 个列表:一个字符串列表和一个具有相同长度和相同对应索引的双列表。我需要比较所有的字符串,找到具有相同字符的列表的索引,与它的顺序无关,并删除对应于两者的最高双精度值,

例子:

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)。

这两个数组有一个 lambda 表达式??

我试过的:

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
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 回答
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 回答
0

这是代码:

    var group = str.GroupBy(s => string.Join("", s.ToCharArray().OrderBy(c => c)));
    var _vlr = group.Select(g => g.Min(s => vlr[str.IndexOf(s)]));
    var _str = group.Select(g => g.OrderBy(s => vlr[str.IndexOf(s)]).First());

结果: 在此处输入图像描述

于 2013-05-15T03:32:40.093 回答