arr是字符串数组,例如:["hello", "world", "stack", "overflow", "hello", "again"].
什么是简单而优雅的方法来检查是否arr有重复,如果是,则返回其中一个(无论哪个).
例子:
["A", "B", "C", "B", "A"] # => "A" or "B"
["A", "B", "C"] # => nil
Run Code Online (Sandbox Code Playgroud) 给定一个数组文字,我想创建一个哈希,其中键是数组中的元素,值是包含其他/剩余元素的数组.
输入:
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
输出:
{1=>[2, 3], 2=>[1, 3], 3=>[1, 2]}
Run Code Online (Sandbox Code Playgroud)
如果我引入变量很容易:
arr = [1, 2, 3]
arr.map { |i| [i, arr - [i]] }.to_h
Run Code Online (Sandbox Code Playgroud)
但是使用数组文字,我能想出的唯一解决方案涉及instance_exec或者instance_eval看起来像是hackish:
[1, 2, 3].instance_exec { map { |i| [i, self - [i]] } }.to_h
Run Code Online (Sandbox Code Playgroud)
我是否忽略了内置方法或明显的解决方案?group_by,combination,permutation和partition似乎并没有帮助.
给定两个大小相等的数组,如何找到匹配元素的数量而忽略位置?
例如:
[0,0,5]并且[0,5,5]会返回一个匹配,2因为有一个0和一个5共同点;[1,0,0,3]并且[0,0,1,4]会返回一个匹配,3因为有两个匹配0和一个匹配1;[1,2,2,3]并且[1,2,3,4]将返回匹配的3.我尝试了很多想法,但它们都倾向于变得相当粗糙和复杂.我猜这里有一些很好的Ruby习惯用法,或者也许是一个正则表达式,可以很好地回答这个解决方案.
我正在使用Ruby 2.4.假设我有一个字符串数组(这些字符串都是字符串式的(这是一个字?)整数...
["1", "2", "5", "25", "5"]
Run Code Online (Sandbox Code Playgroud)
如何编写一个函数来告诉我数组中的所有元素是否在数组中出现的次数不超过两次?例如,这个数组
["1", "3", "3", "55", "3", "2"]
Run Code Online (Sandbox Code Playgroud)
将返回false因为"3"发生三次,但这个数组
["20", "10", "20", "10"]
Run Code Online (Sandbox Code Playgroud)
会返回,true因为没有一个元素出现超过两次.
我试图在 1 到 1000000 之间的字符串数组中查找重复值。
但是,使用我拥有的代码,我得到的输出是所有条目都加倍了。
例如,如果我有[1,2,3,4,3,4],它会给我输出 3 4 3 4 而不是 3 4。
这是我的代码:
array = [gets]
if array.uniq.length == array.length
puts "array does not contain duplicates"
else
puts "array does contain duplicates"
print array.select{ |x| array.count(x) > 1}
end
Run Code Online (Sandbox Code Playgroud)
另外,每次测试代码时,我都必须将数组定义为array = [1,2,3,4,5,3,5]. 可以puts工作,但当我使用数组 [gets] 时它不会打印。
有人可以帮助我如何解决这两个问题吗?
我是Ruby的新手,并且希望能够在两个数组之间找到差异.
我知道通常的方法:
a = [...]
b = [...]
difference = (a-b)+(b-a)
Run Code Online (Sandbox Code Playgroud)
但问题在于这是计算集合的差异,因为在ruby中,语句(a-b)定义了相对于b的集合恭维.
这意味着[1,2,2,3,4,5,5,5,5] - [5]= [1,2,2,3,4],因为它取出了第一组中出现的所有5个,而不仅仅是一个,表现得像数据上的过滤器.
我希望它只删除一次差异,例如,差异[1,2,2,3,4,5,5,5,5],并且[5]应该只[1,2,2,3,4,5,5,5]删除一个5.
我可以迭代地做到这一点:
a = [...]
b = [...]
complimentAbyB = a.dup
complimentBbyA = b.dup
b.each do |bValue|
complimentAbyB.delete_at(complimentAbyB.index(bValue) || complimentAbyB.length)
end
a.each do |aValue|
complimentBbyA.delete_at(complimentBbyA.index(aValue) || complimentBbyA.length)
end
difference = complimentAbyB + complimentBbyA
Run Code Online (Sandbox Code Playgroud)
但这看起来非常冗长和低效.我不得不想象有一个更优雅的解决方案.所以我的问题基本上是,找到两个数组的差异的最优雅的方法是什么,如果一个数组出现单个元素然后另一个数组,它们将不会被删除?
我有一个字符串"teststring"。我想在 Ruby 中找到第一个非重复出现的字符。
我有这个 Python 代码:
def first_non_repeat_character(teststring)
unique=[]
repeated=[]
for character in teststring:
if character in unique:
unique.remove(character)
repeated.append(character)
else:
if not character in repeated:
unique.append(character)
if len(unique):
return unique[0]
else:
return false
Run Code Online (Sandbox Code Playgroud) 我想从数组中按值删除(仅一个)元素。
例子 :
x = [1,2,3,2]
x.remove(2)
result: x= [1,3]
Run Code Online (Sandbox Code Playgroud)
但是,我想得到[1,3,2]。
谢谢
试图创建一个函数来计算字符串中不止一次出现的字母数(不一定在一起,而不是它们重复的次数).这就是我所拥有的:
def num_repeats(string)
repeat = []
i1 = 0
i2 = 1
while i1 < string.length
while i2 < string.length
if (string[i1] == string[i2]) && (!repeat.include? string[i1])
repeat << string[i1]
end
i2 +=1
end
i1+=1
end
return repeat.length
end
puts(num_repeats('sldhelanlaskjkajksda'))
Run Code Online (Sandbox Code Playgroud)
出于某种原因,如果在字符串的其余部分中使用了第一个字母,它只会推送字符串的第一个字母,但在此之后,似乎该方法会停止循环遍历字符串的其余部分.
我想首先了解为什么当前的代码不起作用,如果有办法解决它,我也欢迎其他更好的解决方案.
我正在尝试构建一个简单的方法来查看数据库中大约 100 个条目的姓氏,并提取出所有匹配超过特定字母百分比的条目。我目前的做法是:
这有效,但我觉得必须有一些很酷的 ruby/regex/active record 方法可以更有效地执行此操作。我用谷歌搜索了很多,但找不到任何东西。