Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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语言的IP地址数组中按升序排列所有IP地址#_C#_.net 3.5 - Fatal编程技术网

C# 如何在c语言的IP地址数组中按升序排列所有IP地址#

C# 如何在c语言的IP地址数组中按升序排列所有IP地址#,c#,.net-3.5,C#,.net 3.5,如何在c语言的IP地址数组中按升序排列所有IP地址# 我有一个IP地址类数组 ipaddress[] device = new ipaddress[10]; 它有不同的ip值,我想按升序排列它们如果我是正确的,您可以这样做: var list = new string[5]; list = list.OrderByDescending(x => x).ToArray(); 你可以用Linq来做这个 using System.Linq; ipaddress[] sortedDevice

如何在c语言的IP地址数组中按升序排列所有IP地址# 我有一个IP地址类数组

ipaddress[] device = new ipaddress[10];

它有不同的ip值,我想按升序排列它们

如果我是正确的,您可以这样做:

var list = new string[5];
list = list.OrderByDescending(x => x).ToArray();

你可以用Linq来做这个

using System.Linq;

ipaddress[] sortedDevice1 = device.OrderBy(d => d.IP).ToArray(); // assuming the ip address is saved in a field named 'IP'
ipaddress[] sortedDevice2 = device.OrderByDescending(d => d.IP).ToArray(); // if you need it sorted by descending order

如果您的
IP
字段不是
字符串
,您可能希望为
IP
字段实现
IComparable
接口,以提高排序质量,即:获取
11.100>2.100
而不是
2.100>11.100
使用数组中的一种。排序方法,等等。例子很简单:

Array.Sort(device, (a,b) => [compare here, return int] );
这应该起作用:

 Array.Sort(devices, (d1, d2) => d1.IPValue.CompareTo(d2.IPValue));
但是最好使用
List
而不是
Array

您可以使用版本技巧:

样本数据:

IPAddress[] ips = new[]{
        IPAddress.Parse("192.168.1.4"),
        IPAddress.Parse("192.168.1.5"),
        IPAddress.Parse("192.168.2.1"),
        IPAddress.Parse("10.152.16.23"),
        IPAddress.Parse("69.52.220.44"),
    };
升序:

var sortedIps = ips
    .Select(ip => Version.Parse(ip.ToString()))
    .OrderBy(v => v)
    .Select(v => IPAddress.Parse(v.ToString()))
    .ToArray();
结果:

{10.152.16.23}  System.Net.IPAddress
{69.52.220.44}  System.Net.IPAddress
{192.168.1.4}   System.Net.IPAddress
{192.168.1.5}   System.Net.IPAddress
{192.168.2.1}   System.Net.IPAddress
更新

您:它给出的错误“System.Version”不包含定义 用于“解析”。 我:那么你至少没有使用.NETFramework4.0。
你:是的,我正在使用.NET framwork 3.5,所以我需要做哪些更改 是吗

然后您可以使用for
可枚举。OrderBy
/
然后by

sortedIps = ips
    .Select(ip => new { IP = ip, Bytes = ip.GetAddressBytes() })
    .OrderBy(x => x.Bytes[0]).ThenBy(x => x.Bytes[1]).ThenBy(x => x.Bytes[2]).ThenBy(x => x.Bytes[3])
    .Select(x => x.IP)
    .ToArray();
更新2

谢谢,但是如果数组中的任何成员为null,它不会停止。如果我们想 使用包含一些空值的数组。我想最后订购空值

然后使用此查询,将
Byte[]
Byte.MaxValue
一起用于空值:

var sortedIps = ips
    .Select(ip => new { 
        IP = ip,
        Bytes = ip == null
            ? new[] { Byte.MaxValue, Byte.MaxValue, Byte.MaxValue, Byte.MaxValue }
            : ip.GetAddressBytes() 
    })
    .OrderBy(x => x.Bytes[0]).ThenBy(x => x.Bytes[1]).ThenBy(x => x.Bytes[2]).ThenBy(x => x.Bytes[3])
    .Select(x => x.IP)
    .ToArray();

显示示例IP和所需的顺序。为什么
=新字符串[]
ToArray()
已经创建了一个新数组,所以您只是在浪费时间在堆上分配内存,您永远不会使用的。OrderBy仅在列表中可用,需要将其转换回ArrayTanks以便您快速响应,但它会出现以下错误:“System.Version”不包含“Parse”的定义。@Kevan:那么您至少没有使用.NET framework 4.0是的,我使用的是.NET framwork 3.5,那么我需要做哪些更改是吗?@Kevan:更新了我的答案,使用
IPAddress.GetAddressBytes
显示了一种不同的方法。谢谢你,这个答案奏效了!但它只在数组的所有成员都用某个值初始化时才起作用。如果数组的任何成员都为null,它就会停止。如果我们还想使用包含某个null值的数组,那么该怎么办。?