Linq OrderBy排序规则

时间:2016-08-11 12:01:42

标签: c# .net linq sorting

我想知道Linq的OrderBy方法决定如何对字符列表进行排序。我认为它在它们在Ascii表中的值的帮助下将char相互比较,但我自己尝试了它并不正确。那么有人知道排序的规则是什么吗?

修改

 string[] letters = { " ", "!", "+", "1", "9", "?", "A", "B", "Y", "Z", "[", "a", "b", "y", "z", "{"};
 IEnumerable<string> ascending = letters.OrderBy(x => x);
 // returns { " ", "!", "?", "[", "{", "+", "1", "9", "a", "A", "b", "B", "y", "Y", "z", "Z"}

我冒了回来收到同样的名单,但我得到了一份完整的新订单。

解: 我使用了一个字符串数组而不是一个char数组,因此OrderBy对字符串进行了排序,这与使用字符时的字符串不同。

3 个答案:

答案 0 :(得分:4)

订购很好。它按照比较string(它是string[])的方式对其进行排序。如果您希望它由char的ASCII值执行,则应为char[]而不是string[]

char[] letters = { ' ', '!', '+', '1', '9', '?', 'A', 'B', 'Y', 'Z', '[', 'a', 'b', 'y', 'z', '{', ' ', '!', '+', '1', '9' };
var descending = letters.OrderByDescending(x => x).ToList();

此外,通过变量的名称,我想您需要OrderByDescending方法。

答案 1 :(得分:1)

如果由于某种原因你想继续使用字符串,但不想进行默认的区域性敏感比较,可以通过在sess.run(...)的调用中添加with tf.Session() as sess: softmax_tensor = sess.graph.get_tensor_by_name('final_result:0') for image in images: predictions = sess.run(softmax_tensor, {'DecodeJpeg:0': image}) 参数来强制进行“ASCII”排序。 },并指定您希望比较使用代码点值进行排序:

IComparer

答案 2 :(得分:1)

通过ASCII或Unicode值比较两个字符。

ASCII表:http://www.theasciicode.com.ar/american-standard-code-information-interchange/ascii-codes-table.png

所以('A'是65)被认为大于('a'是97)b'coz 65来自97之前。 您可以在上表中查找数组中每个字符的ASCII代码。 (你的数组应该是“char []字母”而不是“字符串[]字母”从我能看到的内容:D)

相关问题