根據輸入ip,使用二分法獲得ip對應的省市資訊。內容格式如下:處理掉無效資料後,資料量大小不到20mb,使用乙個map,乙個set,占用記憶體不多,可以作為乙個介面服務使用。
輸入ip位址,輸出ip位址對應的省市。
ip開始
ip結束國家省
市區縣區域code
**如下:
/**
* *
* 根據輸入ip,使用二分法演算法獲得省市資訊
* * 第一位ip255 *256*256*256 = 4278190080,
* 目前資料中最大值為224 *256*256*256=3758096384,也超過int正數最大值2147483647,所以要使用long型別儲存ip位址轉後的值
* result=first+second+third+forth是將ip位址轉為long型別。每一位ip通過移動位置的操作,保證每一位ip的值不會覆蓋。
* */
object ip2cityinfo
val result=ip2long(ip)
if(!(province.equals("未知")||city.equals("未知")))else
set.add(result)
total=total+1
})//total與set.size相等,表示ip位址轉化為long型別,沒有衝突
if(total==set.size)else
println("輸入記錄總數:",total)
println("有效記錄條數:",ip2city.size)
println("無效記錄條數:",total-ip2city.size)
println("有效記錄取樣:")
for(e
println("無效記錄取樣:")
for(e
println("排序後記錄取樣:")
sorted=ip2city.keyset.toseq.sorted
for(e
//test
println(ip2cityinfo("1.194.194.198"))
println(ip2cityinfo("1.194.4.198"))
} /**
** 利用二分查詢演算法,根據輸入的ip字串省市資訊,查詢出包含此ip區間的
** @param ip 輸入ip
* @return 省市資訊
* */
def ip2cityinfo(ip :string):string= else if(sorted(mid)
}//當沒有查詢到結果,保證index取得最小的索引值
if(index==0)
ip2city(sorted(index))
} /**
* 將ip字串轉化為long型別數字
** 使用第乙個ip值的四位ip進行省市的鎖定。如果使用前三段導致獲得省市資訊不準確
* 222.221.30.199 222.221.30.201 中國 雲南省 昆明市 未知 530100
* 222.221.30.202 222.221.30.202 中國 雲南省 保山市 昌寧縣 530524
** */
def ip2long(ip :string):long=
}
根據IP獲取省市
public class ipaddress 2 0 4 d 25 0 5 01 d d?ip正則 string ip string.empty ip位址 string country string.empty 國家 string adr string.empty 省市 string html ge...
獲得省市區的統計資訊
問題描述 獲取各個省市的統計資訊 如 浙江省,則需要獲取省市區的所有統計資訊,如浙江省 浙江省下所有的市 浙江省下所有的市下的所有區 杭州市,則需要獲取杭州市 杭州市下所有區的統計資訊 濱江區,則獲取濱江區的統計資訊,思路 獲取所有的省市區的資訊 省的統計資料 市的統計資料,做關聯查詢,因為設定省市...
根據主機名獲得IP及根據IP獲得主機名
根據主機名獲得ip好說,前面已經學習過了,用函式gethostbyname獲得主機資訊,其中包括ip資訊 int cneighbordlg getipbyname afxmessagebox t list return 0 else 根據ip獲得主機資訊則要用gethostbyaddr函式 int ...