gpt4 book ai didi

java - 二维数组值频率

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:08 25 4
gpt4 key购买 nike

如果我有一个排列如下的二维数组:

  String X[][] = new String [][] {{"127.0.0.9", "60", "75000","UDP", "Good"},
{"127.0.0.8", "75", "75000","TCP", "Bad"},
{"127.0.0.9", "75", "70000","UDP", "Good"},
{"127.0.0.1", "", "70000","UDP", "Good"},
{"127.0.0.1", "75", "75000","TCP", "Bad"}
};

我想知道每个值的频率..所以 I27.0.0.9 得到 2。我该如何为此做一个通用的解决方案?在 Java 或任何语言的任何算法中?

最佳答案

看起来您需要自定义数据类型来封装每一行而不是使用 String[][] , 但要更直接地回答您的问题,您可以使用 Map<String,Integer> 对于每一列。 HashMap<String,Integer>可以预期在最佳时间执行此操作。


这是一个演示这个想法的片段:

import java.util.*;

public class Frequency {
static void increment(Map<String,Integer> map, String key) {
Integer count = map.get(key);
map.put(key, (count == null ? 0 : count) + 1);
}
public static void main(String[] args) {
String table[][] = new String[][] {
{"127.0.0.9", "60", "75000","UDP", "Good"},
{"127.0.0.8", "75", "75000","TCP", "Bad"},
{"127.0.0.9", "75", "70000","UDP", "Good"},
{"127.0.0.1", "", "70000","UDP", "Good"},
{"127.0.0.1", "75", "75000","TCP", "Bad"}
};
final int M = table.length;
final int N = table[0].length;
List<Map<String,Integer>> maps = new ArrayList<Map<String,Integer>>();
for (int i = 0; i < N; i++) {
maps.add(new HashMap<String,Integer>());
}
for (String[] row : table) {
for (int i = 0; i < N; i++) {
increment(maps.get(i), row[i]);
}
}
for (Map<String,Integer> map : maps) {
System.out.println(map);
}
System.out.println(maps.get(0).get("127.0.0.9"));
}
}

这会产生以下输出:每一行是每一列的频率图:

{127.0.0.9=2, 127.0.0.8=1, 127.0.0.1=2}
{=1, 60=1, 75=3}
{75000=3, 70000=2}
{UDP=3, TCP=2}
{Good=3, Bad=2}
2

注意:如果您不关心将所有列的值混合在一起,那么您只需要一个 Map , 而不是 List<Map>每列一个。但是,这会使设计变得更糟。您确实应该将每一行封装到自定义类型中,而不是将所有内容混合为 String[][] .

例如,其中一些列看起来确实应该是 enum .

enum Protocol { UDP, TCP; }
enum Condition { Good, Bad; }
//...

关于java - 二维数组值频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2840458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com