首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取值为数组中最大值的变量。

获取值为数组中最大值的变量。
EN

Stack Overflow用户
提问于 2015-12-22 03:38:54
回答 3查看 247关注 0票数 4

如果我在Ruby中有一个变量数组:

代码语言:javascript
复制
a = 4
b = 7
c = 1

array = [a, b, c]

如何访问具有最高值的变量的名称?(在本例中,b)我希望检索对具有最高值的元素的引用,以便以后能够操作它:

代码语言:javascript
复制
b += 10 

我尝试过array.max,但它只返回最大值7

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-22 03:56:09

当您通过编写array = [a, b, c]构建数组时,数组中的点不会与名为abc的变量保留任何类型的关联,因此您无法准确地完成您正在讨论的内容。这些变量可以在不影响数组的情况下进行更改。

您可以改变存储数据的方式,以使之成为可能,但是如果不知道您正在存储哪些数据,那么很难推荐一种好的方法。您可以考虑将数据存储在散列中,而不是存储在松散变量和数组中:

代码语言:javascript
复制
hash = { a: 4, b: 7, c: 1}
票数 6
EN

Stack Overflow用户

发布于 2015-12-22 04:07:38

Ruby不支持通过引用传递对象,这在本质上就是您要做的事情。调用array.max时,将向您传递Fixnum 7的一个副本,并对此副本应用赋值和修改。

也就是说,您不能存储对此Array元素的引用,并在以后修改它。但是,您可以在现场修改最大值,但可以使用:

代码语言:javascript
复制
array[array.index(array.max)] = array.max + 10
#=> 17

array
#=> [4, 17, 1]

注意,当Array中有重复值时,array.index(array.max)将返回第一个值的索引。

存储索引以供以后使用并不是一个可靠的解决方案,因为,虽然Array中的Array是有序的,但Array或其元素可以在检索索引的点和决定更改相应值的点之间进行修改。

另一个答案建议有一种模仿参照传递行为的方法,但是在这样做的过程中,你违背了语言的意图,这可能会导致很大的痛苦。

票数 4
EN

Stack Overflow用户

发布于 2015-12-22 04:09:57

你可以用Array#index来做这个。

代码语言:javascript
复制
1.9.3-p484 :008 > max_elem = array.index(array.max)
 => 1
1.9.3-p484 :009 > array[max_elem] = array[max_elem] + 10
 => 11
1.9.3-p484 :010 > array
 => [4, 17, 1]
1.9.3-p484 :011 >
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34408067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档