【问题标题】:Is there a way to randomly choose value from hashmap by key? [duplicate]有没有办法通过键从哈希图中随机选择值? [复制]
【发布时间】:2015-06-19 08:20:20
【问题描述】:

假设我有两个 ImageButton,一个 HashMap,以及作为值放置在此 HashMap 中的 drawable(resources) 中的图片。 我需要使用 Randomizer 按键从HashMap 中随机选择一个值,然后将此值(即图片)分配给ImageButton 作为背景。 比如第一个按钮被点击,第二个按钮的背景会随机变化。

这就是我已经拥有的:

public class MainActivity extends Activity {

  final Resources res = getResources();
  final Random random = new Random();

  final ImageButton imgButt1 = (ImageButton) findViewById(R.id.imageButton1);
  final ImageButton imgButt2 = (ImageButton) findViewById(R.id.imageButton2);

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Drawable coub1 = res.getDrawable(R.drawable.coub1);
    Drawable coub2 = res.getDrawable(R.drawable.coub2);
    Drawable coub3 = res.getDrawable(R.drawable.coub3);
    Drawable coub4 = res.getDrawable(R.drawable.coub4);
    Drawable coub5 = res.getDrawable(R.drawable.coub5);
    Drawable coub6 = res.getDrawable(R.drawable.coub6);
    Drawable coub7 = res.getDrawable(R.drawable.coub7);
    Drawable coub8 = res.getDrawable(R.drawable.coub8);
    Drawable coub9 = res.getDrawable(R.drawable.coub9);
    Drawable coub10 = res.getDrawable(R.drawable.coub10);

    final Map<Integer,Object> someHashMap = new HashMap<Integer,Object>();
    someHashMap.put(1, coub1);
    someHashMap.put(2, coub2);
    someHashMap.put(3, coub3);
    someHashMap.put(4, coub4);
    someHashMap.put(5, coub5);
    someHashMap.put(6, coub6);
    someHashMap.put(7, coub7);
    someHashMap.put(8, coub8);
    someHashMap.put(9, coub9);
    someHashMap.put(10, coub1);

    imgButt1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Object[] values = someHashMap.values().toArray();
            Object randomValue = values[random.nextInt(values.length)];
            int drawableID = values.;
            imgButt2.setBackgroundResource(drawableID);
        }
    });

    imgButt2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Object[] values = someHashMap.values().toArray();
            Object randomValue = values[random.nextInt(values.length)];
            int drawableID = myImages.getResourceId(randomInt, -1);
            imgButt1.setBackgroundResource(drawableID);
        }
    });
  }
}

【问题讨论】:

  • 不是一种有效的方法。如果您将密钥放在List 中会更容易。
  • 像@LouisWasserman 所说的那样跟踪您的密钥

标签: java android random hashmap


【解决方案1】:

您可以通过将 Map 的所有键放入一个列表(或数组)中来随机选择一个键,然后从该列表(或数组)中随机选择一个索引

List<Integer> keys = new ArrayList<Integer>(someHashMap.keys());
Integer randomKey = keys.get(random.nextInt(keys.size()));
Object randomValue = someHashMap.get(randomKey);

【讨论】:

  • map中没有keys()这样的方法...
【解决方案2】:

您可以完全放弃Map,而只使用int 值的数组。

int[] ids = {R.drawable.coub1, R.drawable.coub2, R.drawable.coub3, R.drawable.coub4, 
             R.drawable.coub5, R.drawable.coub6, R.drawable.coub7, R.drawable.coub8, 
             R.drawable.coub9, R.drawable.coub10};
// Then, when you need a random Drawable 
Drawable drawable = res.getDrawable(ids[random.nextInt(ids.length)]);

【讨论】:

    猜你喜欢
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多