字典的替代品

时间:2014-02-24 10:26:48

标签: c# linq dictionary

目前我的数据被读入我的程序,由第三方设备生成。我发送的是一个由两个单独的值组成的字符串,这些值连接在一起并用短划线和句号分隔。我最初将这些数据放在字典中,使用第一个值作为键(作为常量),第二个作为值,因为它可以随时改变。

使用字典我对它进行排序,使得值按降序排列,使得最低值是字典中的第一个条目,第二个最低值是第二个,依此类推。我相信这也在更新,所以如果5个条目突然低于第一个条目,它将把它的位置移动到字典的第一个条目并将其他所有内容推到一个。

使用以下代码对我使用LINQ的值进行排序:

// Order by values.
var items = from pair in dictionary
            orderby pair.Value ascending
                select pair;

// Display results.
foreach (KeyValuePair<string, float> pair in items)
{
    Debug.Log(  "Key value: " + pair.Key + " Value: " + pair.Value + "\n"); 
}

当我在iPad上运行时,我在Xcode中遇到JIT错误(数据通过插件从Xcode发送到Unity)。我环顾四周,结果发现一些LINQ功能与Xcode不兼容。

有人可以建议另一种方式,我可以用不依赖于LINQ的类似方式对数据进行排序吗?

修改的 我需要澄清一下:随着从第三方设备流入的值,我需要一种方法来绑定其键的值。我有各种各样的设备发送数据,但它们都有独特的常量,我用来将值绑定到。这样我知道哪个读取来自哪个设备。

正如我没说的那样,这是我运行上述代码时得到的xCode消息:

  

ExecutionEngineException:尝试JIT编译方法   使用--aot-only运行时,'System.Linq.OrderedEnumerable 1<System.Collections.Generic.KeyValuePair 2&gt;:GetEnumerator()'。

3 个答案:

答案 0 :(得分:0)

如果您想要词典的替代词,可以使用类列表。

class ClassName
{
    public float Field1 {get; set;}
    public string Field2 {get; set;}
}

查看List Class

答案 1 :(得分:0)

使用SortedList

或只使用普通的List&lt;&gt;并调用排序。 您可以通过使项目实现IComparable

来提供自己的排序策略

答案 2 :(得分:0)

我认为你可以使用Tuple

 List<Tuple<string, float>> toPrint = new List<Tuple<string, float>>();

要阅读有关元组的更多信息,

Tuples in c#