有没有办法通过键从哈希图中随机选择值?
Is there a way to randomly choose value from hashmap by key?
假设我有两个ImageButtons,一个HashMap
,drawable(resources)中的图片作为一个值放在这个HashMap
中。
我需要使用 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);
}
});
}
}
您可以随机选择一个键,方法是将一个 Map 的所有键放入一个列表(或数组)中,然后从该列表(或数组)中随机选择一个索引
List<Integer> keys = new ArrayList<Integer>(someHashMap.keys());
Integer randomKey = keys.get(random.nextInt(keys.size()));
Object randomValue = someHashMap.get(randomKey);
您可以完全放弃 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)]);
假设我有两个ImageButtons,一个HashMap
,drawable(resources)中的图片作为一个值放在这个HashMap
中。
我需要使用 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);
}
});
}
}
您可以随机选择一个键,方法是将一个 Map 的所有键放入一个列表(或数组)中,然后从该列表(或数组)中随机选择一个索引
List<Integer> keys = new ArrayList<Integer>(someHashMap.keys());
Integer randomKey = keys.get(random.nextInt(keys.size()));
Object randomValue = someHashMap.get(randomKey);
您可以完全放弃 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)]);