最近做一个页面需要从一个api里获取ip和label, api返回的json格式.但里面没有对ip排序,我们需要的是按id的从小到大排序
-
public class GetLabel:List<object> //解释json字符串
-
{
-
public string ip { get; set; }
-
public string label { get; set; }
-
}
-
-
-
public string markIpStr(string myData) { // 为了排序对每个ip的长度进行补偿
-
string result = "";
-
foreach (var s in myData.Split('.'))
-
{
-
if (s.Length == 1)
-
{
-
result += "00" + s + ".";
-
}
-
else if (s.Length == 2)
-
{
-
result+= "0" + s + ".";
-
}
-
else
-
{
-
result+= s+".";
-
}
-
}
-
return result;
-
}
-
ArrayList ls = new ArrayList { };//array用来存ip转成int类型,然后就可以排序
-
Hashtable hs = new Hashtable { }; //这个hs用来存放排序前后的关联
-
JavaScriptSerializer js = new JavaScriptSerializer();
-
List<GetLabel> list = js.Deserialize<List<GetLabel>>(result);//假设result就是我们从api获取到的json字符串,这里如果获取就不说了.
-
List<GetLabel> labelList = new List<GetLabel>(list);
-
List<GetLabel> labelListSorted = new List<GetLabel> { };
-
for (int i = 0; i < labelList.Count(); i++) //循环得到的json
-
{
-
try
-
{
-
hs.Add(Convert.ToInt64(markIpStr(labelList[i].ip).Replace(".", "")), i);//把ip转成int类型并做为key, value是原始json的index
-
ls.Add(Convert.ToInt64(markIpStr(labelList[i].ip).Replace(".", "")));//把ip转成int类型并存入ls
-
}
-
catch { }
-
}
-
ls.Sort();//对ls排序
-
foreach (var i in ls)//循环ls
-
{
-
-
labelListSorted.Add(labelList[Convert.ToInt32(hs[i])]);//从hs拿到想对应的value,这个value就是原始json的index,用index取出再存入新的labelListSorted,整个排序完成
-
}
欢迎大家发表更好的方法或指点.
阅读(668) | 评论(0) | 转发(0) |