优化这段代码 ScanResults.Clear(); JsonData result = JsonMapper.ToObject(info); JsonData data = JsonMapper.ToObject(result["result"].ToString()); List<WifiScanResult> wifiList = JsonMapper.ToObject<List<WifiScanResult>>(data["wifiList"].ToJson()); for (int i = 0; i < wifiList.Count; i++) { bool iscanAdd = true; for (int j = 0; j < ScanResults.Count; j++) { if (ScanResults[j].ssid.Equals(wifiList[i].ssid)) { iscanAdd = false; } } if (iscanAdd) { ScanResults.Add(wifiList[i]); } }
时间: 2023-07-15 09:15:27 浏览: 240
可以考虑使用HashSet来代替List,这样可以避免内部循环的遍历。代码如下:
```
ScanResults.Clear();
JsonData result = JsonMapper.ToObject(info);
JsonData data = JsonMapper.ToObject(result["result"].ToString());
List<WifiScanResult> wifiList = JsonMapper.ToObject<List<WifiScanResult>>(data["wifiList"].ToJson());
HashSet<string> ssidSet = new HashSet<string>(); // 用于记录已经添加的ssid
for (int i = 0; i < wifiList.Count; i++)
{
if (ssidSet.Add(wifiList[i].ssid)) // 如果该ssid不存在于HashSet中,则添加到ScanResults中
{
ScanResults.Add(wifiList[i]);
}
}
```
这样做的好处是,HashSet的Add操作时间复杂度为O(1),而List的Contains操作时间复杂度为O(n),所以使用HashSet可以避免内层循环的遍历,从而提高代码性能。
相关问题
检查代码问题 JsonData jsonData= JsonMapper.ToObject(File.ReadAllText("D:\\Work\\Test\\Console\\DataStructure\\JSON\\json.txt")); Console.WriteLine(jsonData.ToString()); foreach (JsonData item in jsonData) { JsonData value= item["BUOY_LIST"]; Console.WriteLine(value.ToString()); }
这段代码的问题在于,`jsonData` 是一个 JSON 对象,而不是一个 JSON 数组。因此,你不能使用 `foreach` 遍历它。要访问 `"BUOY_LIST"` 的值,你需要直接使用索引操作符访问它,而不是遍历整个对象。
下面是修改后的代码:
```
JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("D:\\Work\\Test\\Console\\DataStructure\\JSON\\json.txt"));
Console.WriteLine(jsonData.ToString());
JsonData value = jsonData["BUOY_LIST"];
Console.WriteLine(value.ToString());
```
public void sendEndApk(string apkName) { JsonData data = new JsonData(); data["opcode"] = (int)SocketEventHandler.OpCode.endApk; data["seq"] = RandomSeq(32); JsonData content = new JsonData(); content["mission_name"] = apkName; data["content"] = content; sendMessage(JsonMapper.ToJson(data)); } 改写成java,fastjson
将 C# 代码转换为 Java 代码并使用 FastJSON 序列化 JSON 对象:
```java
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import java.util.Random;
public class SocketClient {
public void sendEndApk(String apkName) {
JSONObject data = new JSONObject();
data.put("opcode", SocketEventHandler.OpCode.endApk.ordinal());
data.put("seq", randomSeq(32));
JSONObject content = new JSONObject();
content.put("mission_name", apkName);
data.put("content", content);
sendMessage(JSON.toJSONString(data));
}
private String randomSeq(int length) {
Random random = new Random();
String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
int index = random.nextInt(chars.length());
sb.append(chars.charAt(index));
}
return sb.toString();
}
private void sendMessage(String message) {
// 发送消息给服务器
}
}
```
上述代码中,我们使用了 Java 的 `JSONObject` 类来构造 JSON 对象。`JSONObject` 的 `put(key, value)` 方法可以将一个键值对添加到 JSON 对象中。我们使用了 FastJSON 库的 `JSON.toJSONString(object)` 方法将 JSON 对象序列化为 JSON 字符串。在 `randomSeq(length)` 方法中,我们使用了 Java 的 `StringBuilder` 类来拼接生成的随机字符串。
阅读全文