C#当值太大时如何对int进行排序

时间:2017-11-13 03:38:59

标签: c# sorting

8
723
77715926535897932384626433832795

通常我会将它们放入数组并使用Sort方法以数字方式对它们进行排序。

但是,上述值太大而无法放入Int64,如果使用string数组,则会在77715926535897932384626433832795之后产生意外结果。如何排序如此大的价值?

6 个答案:

答案 0 :(得分:2)

您可以使用int64命名空间中的BigInteger类,而不是使用System.Numerics来存储您的值。 如果你想使用原始类型,那么 float,double,long 就是你的选择。

Primitive data types,大致长度

  1. float:-3.4×10 ^ 38至+3.4×10 ^ 38
  2. double:±5.0×10 ^ -324至±1.7×10 ^ 308
  3. long: - 9,223,372,036,854,775,808至9,223,372,036,854,775,807
  4. 有关以下内容的详细信息:System.Numerics

    对BigInteger进行排序:Look at this example

    现在选择是你的。快乐的编码

答案 1 :(得分:2)

如果您没有要求值必须是整数,则可以对所有值使用double而不是Int64double的最大值是1.7976931348623157E + 308,因此它比您显示的示例大得多。这也可能是一个简单的代码更改。 BigInteger会像人们提到的那样需要进行其他一些代码更改。

答案 2 :(得分:2)

您始终可以按长度排序,然后按值排序:

var numbers = new []
{
    "8",
    "77715926535897932384626433832795",
    "723",
};

var sorted =
    numbers
        .OrderBy(n => n.Length)
        .ThenBy(n => n)
        .ToArray();

这给出了:

8 
723 
77715926535897932384626433832795 

答案 3 :(得分:2)

最佳选择是使用容量更大的数值数据类型。最大的数值数据类型是decimal,它具有96位精度(大约28位)。介于两者之间还有一些其他数据类型。通常,最好使用足够大的数据类型。对于浮点数据类型,当有效位数太多时,请注意精度损失。

如果您使用的数字如此之大,以至于它们不适合任何数值数据类型,您可以通过用零填充来对任意长整数进行排序,使它们的长度都相同。

{{1}}

答案 4 :(得分:0)

在这种情况下,可以分两步完成排序。

1.Sort基于字符串的长度。 (删除任何前导零)。

2.之后排除字符串。

string[] numbers = { "9", "33", "11", "22", "723", "8", "77715926535897932384626433832795" };   
Array.Sort(numbers, (x, y) =>
            {
                int val = x.Length - y.Length;
                if (val == 0)
                {
                    val = x.CompareTo(y);
                }
                return val;
            });

输出:

"8"
"9"
"11"
"22"
"33"
"723"
"909"
"77715926535897932384626433832795"

答案 5 :(得分:0)

我在其他网站找到了答案如下:

   string[] unsorted = { "77715926535897932384626433832795", "2398798734", "11" }; 

    Array.Sort(unsorted,(string a,string b) => {
        if(a.Length == b.Length)
            return string.Compare(a,b,StringComparison.Ordinal);
        return a.Length - b.Length;
    });

如果我理解正确,这将使用RAW字节比较每个元素,因此效率最高。