Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Rails:循环比较两个数组并将匹配推送到新数组

Rails:循环比较两个数组并将匹配推送到新数组
EN

Stack Overflow用户
提问于 2015-03-23 14:54:42
回答 2查看 1.3K关注 0票数 1

我有两个数组,我需要互相检查。当找到匹配时,我需要从第一个数组中取消值,并将该值推送到一个新数组。

下面是一个示例:

第一阵列import_data

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
["mario", "blue", "SGC", "CJ672PA0"], 
["solid snake", "green", "NID", "VI6965KD"], 
["samus", "maroon", "TRUST", "DNYU6539"], 
["deckard cain", "purple", "JAFA", "SJW252MZ"],
["wedge", "yellow", "WALTER", "UJ28NVM1"]

第二阵列current_data

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
["gordon", "orange", "DRONE", "OGJR8C0D"], 
["samus", "black", "TRUST", "DNYU6539"], 
["commander shepard", "red", "WHX", "TH985OI3"]

请注意,"samus“显示在两个数组中,所有数据都相同,但颜色发生了更改。

我的意图是循环遍历import_data,检查数组中每个项的最后一个索引(8位数字的"id"),并将其与current_data进行比较。每次找到“匹配”(基于8位数字的"id")时,我都希望将该项推入一个新的数组update_data中,然后在import_data数组中进行匹配的unset

问题是两个数组的长度不同。因此,一旦我的循环超过一项的长度,它就不能再检查该索引,从而导致错误。

我的代码本质上是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import_data.each_with_index do |data, index|
  if data[3] == current_data[index].id
    # @update_data << somehow push all of the data
  end
end

之所以不能工作,是因为import_data的长度比current_data的长。这将导致错误:

“未定义的方法‘`id’for nil:NilClass"

理想情况下,最终结果如下:

"samus“已从import_data数组中移除并推送到update_data数组中。

import_data阵列一个又一个循环

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
["mario", "blue", "SGC", "CJ672PA0"], 
["solid snake", "green", "NID", "VI6965KD"], 
--- 
["deckard cain", "purple", "JAFA", "SJW252MZ"],
["wedge", "yellow", "WALTER", "UJ28NVM1"]

新填充数组update_data

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ["samus", "maroon", "TRUST", "DNYU6539"]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-23 18:32:00

由于普拉卡什的答案是可行的,我认为这是比较直接的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import_data = [
  ["mario", "blue", "SGC", "CJ672PA0"], 
  ["solid snake", "green", "NID", "VI6965KD"], 
  ["samus", "maroon", "TRUST", "DNYU6539"], 
  ["deckard cain", "purple", "JAFA", "SJW252MZ"],
  ["wedge", "yellow", "WALTER", "UJ28NVM1"]
]
current_data = [
  ["gordon", "orange", "DRONE", "OGJR8C0D"], 
  ["samus", "black", "TRUST", "DNYU6539"], 
  ["commander shepard", "red", "WHX", "TH985OI3"]
]

current_ids = current_data.map {|c| c[3]}

update_data = import_data.inject([]) do |result, data|
  result << import_data.delete(data) if current_ids.include?(data[3])
  result
end

跑完之后你会得到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
update_data = [
  ["samus", "maroon", "TRUST", "DNYU6539"]
]
import_data = [
  ["mario", "blue", "SGC", "CJ672PA0"], 
  ["solid snake", "green", "NID", "VI6965KD"], 
  ["deckard cain", "purple", "JAFA", "SJW252MZ"],
  ["wedge", "yellow", "WALTER", "UJ28NVM1"]
]

希望能帮上忙。

票数 3
EN

Stack Overflow用户

发布于 2015-03-23 15:38:08

完成你正在做的事情的一种方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import_data = [ 
                ["mario", "blue", "SGC", "CJ672PA0"], 
                ["solid snake", "green", "NID", "VI6965KD"], 
                ["samus", "maroon", "TRUST", "DNYU6539"], 
                ["deckard cain", "purple", "JAFA", "SJW252MZ"],
                ["wedge", "yellow", "WALTER", "UJ28NVM1"]
              ]

current_data = [
                 ["gordon", "orange", "DRONE", "OGJR8C0D"], 
                 ["samus", "black", "TRUST", "DNYU6539"], 
                 ["commander shepard", "red", "WHX", "TH985OI3"]
                ]

查找这两个数组的键:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import_data_keys = import_data.map { |x| x[3] }
=> ["CJ672PA0", "VI6965KD", "DNYU6539", "SJW252MZ", "UJ28NVM1"]
current_data_keys = current_data.map { |x| x[3] }
=> ["OGJR8C0D", "DNYU6539", "TH985OI3"]

通过将这两个数组相交来查找公共密钥:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
common_keys = import_data_keys & current_data_keys
=> ["DNYU6539"]

使用common_keysimport_data中删除并推送到update_data

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
common_keys.each do |key|
  import_data.each_with_index do |data, index|
    if data[3] == key
      update_data << import_data[index]
      import_data.delete_at(index)
      break
    end
  end
end

注意:break语句用于在元素找到和处理后停止该迭代。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29221948

复制
相关文章
循环数组
array ( 'product_id' => array ( 0 => '1', 1 => '16', ), 'product_price_id' => array ( 0 => '2', 1 => '', ), 'qty' => array ( 0 => '1', 1 => '1', ), )
botkenni
2022/01/10
1.3K0
Java 两个数组比较内容是否相等
有两个数组,前提是数组对象是一样的。需要比较这两个数组中对象的值是否一致?需要考虑对象的顺序。如果对象里面在嵌套一个数组怎么处理。
赵哥窟
2022/07/08
2.1K0
numpy:数组比较
1、单条件 m=np.array([ [1,2,3], [10,20,30], [35,45,55] ]) n=(m==20) print(n) 输出 [[False False False] [False True False] [False False False]] col2=(m[:,1]==20) print(col2) 输出 [False True False] print(m[col2,:]) 输出true值的那一行数据 [[10 20 30]] 2、多条件 v
程裕强
2019/10/24
1.5K0
数组常用循环
对于JS我们常见的循环有下面这些: for 循环 for in 循环 for of 循环 forEach() map() filter() some() every() 下面要循环的数组 var arr = ['a', 'b', 'c']; 1、for 循环 for (var i = 0; i < arr.length; i++) { console.log(arr[i]) } 2、for in 循环 for (var i in arr) { cons
用户6973020
2020/02/24
1.4K0
数组循环左移
/* 功能:数组循环左移 日期:2013-05-20 */ #include <stdio.h> #include <stdlib.h> #include <math.h> #define LEN 6
WindCoder
2018/09/19
1.6K0
Java数组循环_java遍历object数组
三维数组:int[][][]arr = { { {1,2},{3,4,5},{6}},{ {7,8},{9}},{ {10,11},{12,13}}}
全栈程序员站长
2022/11/04
2.7K0
js比较前后两个数组对象的差异
输出: { delData: [ { id: 1, type: ‘直尺’, price: 2 }, { id: 3, type: ‘直尺’, price: 4 }, { id: 4, type: ‘直尺’, price: 5 } ], addData: [ { id: 5, type: ‘文具盒’, price: 10 }, { id: 6, type: ‘铅笔’, price: 2 } ] }
likepoems
2023/03/08
4K0
数组比较函数 ArrayDiff
function defaultCheck (source, target) { return source === target } const MAX_RANGE = 10000 /** * 数组数据比对 * @summary * 比较数组差异,筛选出: * 1.相同项 ( 未改变 ) * 2.旧的不同项 (已删除) * 3.新加入项 (新添加) * 用于多选数组数据比较 * 注意:限制了最大便利数 MAX_RANGE * @param {*} oldList 旧数据
copy_left
2022/12/18
6670
PHP数组定义写法和数组赋值以及数组的循环
今天分享的是PHP数组定义写法和数组赋值以及数组循环和数组取值的写法,和数组的用法。 PHP数组定义写法 // 空数组 $arr = array(); // 有值数组 $arr = array("",""); PHP数组赋值 $arr[0] = '云+社区'; array('0' => '云+社区'); PHP数组取值 $arr[0]; // 下面数组是名称数组的取值 $arr['arrname']; PHP数组循环取值 $arr = array('数值','数值','数值'); // for循环取值
小唐同学.
2022/03/07
4.3K0
java中输出数组内容的函数,并将数组内容作为参数_数组的逆序输出
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/08
2.8K0
环形数组循环
给定一个含有正整数和负整数的环形数组nums,如果某个索引中的数k为正数,则向前移动 k个索引,相反如果是负数-k,则向后移动k个索引。因为数组是环形的,所以可以假设最后一个元素的下一个元素是第一个元素,而第一个元素的前一个元素是最后一个元素,确定nums中是否存在循环或周期。循环必须在相同的索引处开始和结束并且循环长度>1。此外,一个循环中的所有运动都必须沿着同一方向进行,换句话说,一个循环中不能同时包括向前的运动和向后的运动。
WindRunnerMax
2020/08/27
1.4K0
JavaScript For循环与数组
for 是 JavaScript 提供的另一种循环控制的话句,它和 while 只是语法上存在差异。
用户9615083
2023/10/18
1730
JavaScript For循环与数组
循环移动数组元素
// 循环移动数组元素 // 一种大部分数据只移动一次的算法 // 方法: // 将数据循环移动, 可以直接计算出每个数据的最终位置, 直接移动即可 // 分析: // 这种算法基本可看做每个数据只需要移动一次 // 但是每个数据移动的位置需要计算, 算法理解起来比较难, 实现也比较复杂 // 另外,由于总是间隔较远存取数据,在数据数量较大的时候会导致比较频繁缓存命中失败 // 常用的两次翻转算法,每个数据需要swap两次(平均每个移动3次),而且很容易理解,实现也简单
全栈程序员站长
2022/09/17
1.4K0
Flutter循环Json数组
import 'package:flutter/material.dart'; //快捷方式:fim void main() { runApp(MyApp()); } //自定义组件 class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { // TODO: implement build return MaterialApp( home: Scaffo
明知山
2020/09/02
2.6K0
JS使用循环按指定倍数分割数组组成新的数组的方法
 今天一个新人同事问了我一个问题,就是有一个像下边这种不知道具体长度的数组,想以每4个为一组,重新组合为一个二维数组,很简单的需求只需要用到一个循环再去取余数就可以了,写了一个小demo在这里把代码包括注释贴出来供新人参考,代码如下: var chartArr = [ {value:1,name:'哈哈'}, {value:2,name:'哈哈'}, {value:3,name:'哈哈'}, {value:4,name:'哈哈'
李文杨
2018/03/14
3.2K0
JS使用循环按指定倍数分割数组组成新的数组的方法
循环队列出队-数组循环队列
  我们知道队列这种数据结构的物理实现方式主要还是两种,一种是链队列(自定义节点类),另一种则是使用数组实现,两者各有优势。此处我们将要介绍的循环队列其实是队列的一种具体实现,由于一般的数组实现的队列结构在频繁出队的情况下,会产生假溢出现象循环队列出队,导致数组使用效率降低,所以引入循环队列这种结构。本文将从以下两个大角度介绍循环队列这种数据结构:
宜轩
2022/12/29
1.1K0
两个数组拼接
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144120.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/31
1.2K0
如何比较2个数组相等以及如何检出不匹配项
当我空闲的时候,我会密切地观察读者群里的一举一动,不放过他们的任何一个问题,帮助他们成长虽然不是我应尽的义务,但我的确喜欢和他们交流的感觉,毕竟能帮一个是一个。也许我的一个小小的举动,就能够他们跨越成长过程中的一大步——请给我一次骄傲的机会嘛。
沉默王二
2020/03/11
9690
matlab 循环矩阵_matlab循环输出数组
clc;clearall;closeall;t0=[11];a=[12;34]t=t0;t(1,:)=t0’\an=10;fori=2:nt(i,:)=t(i-1,:)’\a;endt
全栈程序员站长
2022/11/08
3.3K0
linux awk 数组和循环[通俗易懂]
awk 中数组叫做关联数组(associative arrays),下标可以是数字也可以是字符串。awk 中的数组不必提前声明,也不必声明大小,初始化数组元素用 0 或空串,这根据上下文而定。
全栈程序员站长
2022/09/09
3.7K0

相似问题

比较两个对象数组并将数据推送到新数组中

14

比较两个数组并将结果推送到新的数组中

111

如何通过比较两个数组将值推送到新数组

53

循环数组列表,并将匹配两个数组列表的值添加到新的数组列表中

12

JavaScript循环推送到新数组

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文