2014-02-24 35 views
0

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

随着字典的排序,数值按降序排列,以便最低值是字典中的第一个条目,第二个最低的是第二个条目,依此类推。我相信这也是更新的,所以如果第5项突然低于第1项,它将移动它的位置成为字典的第一个输入,并将其他所有项都压低。

要我使用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(该数据是通过在Xcode插件发送JIT错误到Unity)。我环顾四周,结果发现一些LINQ功能在Xcode上不能很好地工作。

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

编辑 我需要澄清:与第三方设备正在直播中的值,我需要一种方法来扎到价值的关键。我有各种各样的设备发送数据,但他们都有独特的常量,我正在使用它来将价值。这样我就知道哪个阅读器来自哪个设备。

正如我就不说了,这是当我运行上面的代码Xcode的消息我得到:

ExecutionEngineException:试图JIT编译方法 “System.Linq.OrderedEnumerable 1<System.Collections.Generic.KeyValuePair 2>: GetEnumerator()'运行时使用--aot-only。

+0

字典别没有订单..他们的条目进入“桶”如果你需要一个有序列表..一个基于分区的集合不是你的答案。 –

+0

我意识到这一点,但我相信我找到了一种使用LINQ将字典排序的方法。事情是,我需要能够将每个值与常量相关联,如果不是,我只会使用数组或其他东西。所以我愿意接受有关替代方案的建议。 – N0xus

+1

“我在Xcode中遇到了JIT错误” - 确切地说有什么错误? – Dennis

回答

0

如果你想要一个词典的替代品,你可以使用类的列表。

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

看一看List Class

0

使用排序列表

或者只是使用普通的列表<>并调用排序。 您可以通过将项目实现IComparable

0

我想你可以使用元组

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

要了解更多关于元组提供自己的排序策略,

Tuples in c#

+0

这只会把我的钥匙放入一次吗?我不想通过在那里拥有数百个相同的密钥来填写列表。理想情况下,我想要的只是一个价值不断更新的钥匙 – N0xus

+0

是的,它会工作! – Sajeetharan