问题是我有两个2D数组,因此需要获取的公共值 都。所以我如何检查两个数组中的公共值。
我为此编写了嵌套的for循环,在这里我 添加一些虚拟数组数据以显示目的:
var arr1 = [[0,0],[0,1],[0,2],[1,0][1,1],[1,2],[2,0],[2,2]];
var arr2 = [[0,1],[0,0],[2,2]];
var commonValueIndex = [];
for(var i=0; i<arr1.length; i++){
for(var j=0; j<arr2.length; j++){
if(arr1[i][j] == arr2[i][j]){
commonValueIndex.push([i,j]);
}
}
}
需要查找公用值并将其索引存储在另一个数组中。请提出任何建议。
答案 0 :(得分:1)
您的代码中有一个逻辑错误。 看看这一行:
private TourElement createElementList(int[][] waypoints){
assert waypoints.length > 0;
TourElement elem = new TourElement();
int lastIndex = waypoints.length-1;
Waypoint wp = createWaypoint(waypoints[lastIndex][0], waypoints[lastIndex][1]);
elem.setWaypoint(wp);
for (int i = lastIndex-1; i >= 0 ; i--) {
wp = createWaypoint(waypoints[i][0], waypoints[i][1]);
elem = elem.addStart(wp);
}
return elem;
}
在这里,您尝试比较两个数组中的各个元素。不幸的是, i 包含arr1的当前元素,而arr2的 j -因此,您实际上是在这里比较苹果和橙子。此外,每个元素都包含另一个索引为0和1的数组,您不会在任何地方进行比较。
这是正确的比较:
private Waypoint createWaypoint(int x, int y) {
Waypoint wp = new Waypoint();
wp.setXY(x, y);
return wp;
}
或完整的示例:
if(arr1[i][j] == arr2[i][j])
将输出正确的公用值
[[0,0],[0,1],[2,2]]
答案 1 :(得分:1)
除了接近二次方的方法外,您还可以获取带有字符串化数组的映射,并在一个循环中对照另一个数组进行检查。然后只需过滤项目,而不必在另一个数组中找到相同的值即可。
<%
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/jigyasa";
String user="root";
String pass="";
Connection con = null;
Statement stmt = null;
ResultSet result = null;
response.setContentType("application/json");
response.setHeader("cache-control", "no-cache");
try{
Class.forName(driver);
con = DriverManager.getConnection(url,user,pass);
}catch(ClassNotFoundException e){
}catch(SQLException e){}
try{
String query;
stmt = con.createStatement();
query = "SELECT * FROM englishq";
result = stmt.executeQuery(query);
if(!result.next()){
out.print("0");
}else{
JSONArray array=new JSONArray();
do{
JSONObject obj = new JSONObject();
obj.put("qid",result.getString("qid"));
obj.put("question",result.getString("question"));
System.out.println(result.getString("qid"));
System.out.println(result.getString("question"));
array.put(obj);
}while(result.next());
out.print(array.toString());
out.flush();
}
}catch(SQLException e){
out.print("Exception: "+e);
}
%>
var array1 = [[0, 0], [0, 1], [0, 2], [1, 0][1, 1], [1, 2], [2, 0], [2, 2]],
array2 = [[0, 1], [0, 0], [2, 2]],
map = new Map(array2.map((v, i) => [JSON.stringify(v), i])),
indices = array1
.map((v, i) => map.has(JSON.stringify(v)) && [i, map.get(JSON.stringify(v))])
.filter(Boolean),
common = array1.filter(v => map.has(JSON.stringify(v)));
console.log(indices);
console.log(common);
答案 2 :(得分:0)
如果我正确理解了您的问题,那么您希望将匹配值的索引存储在arr1
和arr2
中。如果是,那么您需要将if
条件更新为关注
var arr1 = [[0,0],[0,1],[0,2],[1,0][1,1],[1,2],[2,0],[2,2]];
var arr2 = [[0,1],[0,0],[2,2]];
var commonValueIndex = [];
for (var i = 0; i < arr1.length; i++) {
for (var j = 0; j < arr2.length; j++) {
if (arr1[i][0] == arr2[j][0] && arr1[i][1] == arr2[j][1]) {
commonValueIndex.push([i, j]);
}
}
}
console.log(commonValueIndex);