我有一个包含以下数据的CSV:
A.A.B. Direct http://www.aabdirect.com 348 Willis Ave Mineola NY 11501 (800) 382-1002 no email
Abeam Consulting Inc http://abeam.com 245 Park Ave New York NY 10167 (212) 372-8783 no email
Abeam Consulting Inc http://abeam.com 245 Park Ave New York NY 10167 (212) 372-8783 no email
Alvarez & Marsal http://www.alvarezandmarsal.com 600 Madison Ave New York NY 10022 (212) 759-4433 no email
Alvarez & Marsal http://www.alvarezandmarsal.com 600 Lexington Ave Ste 6 New York NY 10022 (212) 759-4433 no email
这里的关键是有时两行中的所有列都匹配(如Abeam Consulting Inc
),但有时情况并非如此。有时只是网站匹配,或电话号码或名称匹配。
关键是网站。如果两个值具有相同的网站,我只想要一个。
如何以非N + 1方式删除此列表?
最好使用某些原生红宝石方法,例如.uniq
或类似的东西。
答案 0 :(得分:2)
只需将这些字符串(我已经简化以避免需要水平滚动)读入数组:
arr = [
"A.A.B. Direct http://www.aabdirect.com (800) 382-1002",
"Abeam Consulting Inc http://abeam.com (212) 372-8783",
"Abeam Consulting Inc http://abeam.com (212) 372-8783",
"Alvarez & Marsal http://www.alvarezandmarsal.com (212) 759-4433",
"Alvarez & Marsal http://www.alvarezandmarsal.com 10022 (212) 759-4433"
]
并且,如您所知,使用Array#uniq,但使用块:
arr.uniq { |line| line[/\shttp:\S+/] }
#=> ["A.A.B. Direct http://www.aabdirect.com (800) 382-1002",
# "Abeam Consulting Inc http://abeam.com (212) 372-8783",
# "Alvarez & Marsal http://www.alvarezandmarsal.com (212) 759-4433"]
见Array#uniq。正则表达式/\shttp:\S+/
读取,"匹配空格后跟字符串"http:"
,后跟一个或多个字符而不是空格(贪婪)"。