Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中基于另一个浮点列表的排序列表_C#_Linq_Sorting - Fatal编程技术网

C# 在C语言中基于另一个浮点列表的排序列表

C# 在C语言中基于另一个浮点列表的排序列表,c#,linq,sorting,C#,Linq,Sorting,在C中给出以下两个列表: List<string> X = new List<string>({ "a", "b", "c", "d", "e", "f", "g", "h", "i"}); List<float> Y = new List<float> ({ 0.991f, 1.471f, 3.819f, 0.003f, 2.291f, 2.887f, 2.887f, 0, 1.0f}); 具有

在C中给出以下两个列表:

List<string> X = new List<string>({    "a",    "b",    "c",    "d",    "e",    "f",    "g", "h",  "i"});
List<float>  Y = new List<float> ({ 0.991f, 1.471f, 3.819f, 0.003f, 2.291f, 2.887f, 2.887f,   0, 1.0f});
具有相同浮点键的元素的顺序并不重要。

这里有一种方法:

IEnumerable<string> sorted = X
    .Select((value, index) => new { Index = index, Value = value })
    .OrderBy(o => Y[o.Index])
    .Select(o => o.Value);
基本上:

用于将列表X投影到一个新的匿名对象序列中,该序列包含来自X的字符串及其在列表中的索引。 按Y中的对应值。 选择匿名对象的值部分以创建一个新序列,该序列仅包含X中的字符串。
示例:

如果每个字符串键都是唯一的,并且每个列表都完全匹配,则可以使用System.Reactive中的zip将它们用作字典中的键

var dic = X.Zip(Y, (k, v) => new { k, v })
          .ToDictionary(x => x.k, x => x.v);
现在,按值对新形成的词典进行排序

var sortedDict = from entry in dic orderby entry.Value ascending select entry;
在使用查询语法的单行程序中,这将变成:

var dic = X.Zip(Y, (k, v) => new { k, v })
          .ToDictionary(x => x.k, x => x.v);
          .OrderBy(x => x.Value);

下面的代码遵循气泡排序技术

for(int i = 1; i < max; i++)
{
    for(int j = 0; j < max - i; j++)
    {
        if(Y[j] > Y[j + 1])
        {
            int temp = X[j];
            X[j] = X[j + 1];
            X[j + 1] = temp;
            int temp1 = Y[j];
            Y[j] = Y[j + 1];
            Y[j + 1] = temp1;
        }
    }
}

非常整洁,非常优雅。
for(int i = 1; i < max; i++)
{
    for(int j = 0; j < max - i; j++)
    {
        if(Y[j] > Y[j + 1])
        {
            int temp = X[j];
            X[j] = X[j + 1];
            X[j + 1] = temp;
            int temp1 = Y[j];
            Y[j] = Y[j + 1];
            Y[j + 1] = temp1;
        }
    }
}