【问题标题】:Display set of items in array(list of type X)显示数组中的一组项目(类型 X 的列表)
【发布时间】:2016-12-20 10:39:57
【问题描述】:

如何在数组中显示一组特定的项目?

我想从索引 0 到 24 打印 25 个项目,然后从索引 25 开始按顺序打印另外 25 个。

我可以显示所有项目,但是如何从数组中的特定索引显示到另一个特定索引?

示例:我的数组中有 100 个项目。

我想显示从 0 到 3 和从 4 到 7 等等。

例如:字母串:A B C D E F G 等。 而且我只想显示 A B C。但是当我做某事时,它会显示数组中的下一个 3。

因为我使用 B_items 作为数组中的对象。我只想在数组中显示 0、1、2,然后再以 3、4、5 等形式显示。

public class B_items
{
    public string Name {get; set;}
    public int Value { Get; set;}
}


B_items[,] items;
 public Inventory(Backpack Bpack, int Columns, int Rows, int SlotWidth, int SlothHeight, Vector2 Pos)
    {
        items = new B_items[Columns, Rows];
        pos = Pos;
        slotWight = SlotWidth;
        slotHeight = SlothHeight;
        backpack = Bpack;
        this.Columns = Columns;
        this.Rows = Rows;

        LoadItems(Bpack);
    }

for(int i = 0; i < items.Length; i++)
{
    Console.WritleLine(Items[i].Name;
}
   }
                if (items[X, Y] != null)
                {

                    spriteBatch.Draw(items[X, Y].Texure, new Rectangle(DrawX, DrawY, slotWight, slotHeight),new Rectangle(0,0,64,64),Color.White);
                    if (items[X, Y].StackSize > 1)
                    {
                        spriteBatch.DrawString(AssetManager.GetInstance().font["Arial8"], items[X, Y].StackSize.ToString(), new Vector2(DrawX + 24, DrawY + 22), Color.White);
                    }

                }

这将写下所有内容,我想做其中的 5 个。虽然我有 100 个,但每次我按下一个按钮时,它都会在该列表中显示下一个 5。

如何显示特定的项目列表...表单索引 0 到 10 和表单 11 到 20 等等。

var stats = items.Skip(5).Take(5)

我不能这样做...我看不到 .Take(param) 或 .Skip(param)

我正在使用

using System.Linq;
using System;

很抱歉没有具体说明。我不能,有时也不知道如何提出一个有效的问题。我的英语不是我的第一语言,所以修正我的语法并删除这一行

【问题讨论】:

  • 向我们展示一些示例数据或预期输出。
  • 尝试一个for-loop,也许结合if (...)和一些简单的计算,或者两个嵌套的for-loops。
  • 这取决于你的数组,如果它是一维的,一个 for 循环和一个范围可以满足你的需要。例如“for (int x =0; x
  • 您的代码无法编译。检查B_items和B_item和Items和items。
  • @sefe 这只是一个例子。我不想写信是正确的;

标签: c# arrays


【解决方案1】:

我想显示从 0 到 3 和从 4 到 7 等等。

您可以使用普通的 for 循环并指定要增加的步长。每一步你都会跳过你已经处理过的项目,并且每次只采取指定的步长(在你的情况下是 3)。 这应该可以解决问题:

// test array 
int[] array = Enumerable.Range(1, 100).ToArray();

int stepsize = 3;

for (int i = 0; i < array.Length; i += stepsize)
{
    string s = String.Join(" ", array.Skip(i).Take(stepsize));
    Console.WriteLine(s);
}

【讨论】:

    【解决方案2】:

    您可以使用 LINQ 访问数组的范围。 Skip 让您决定从哪里开始您的范围以及Take 您想要多少条目。

    如果你想从你的例子中获得D E F,你可以使用:

    var subRange = items.Skip(3).Take(3);
    
    foreach (string item in subRange) {
        Console.WriteLine(item);
    }
    

    【讨论】:

    • 你在哪里找到范围?
    • @LikodricVladan:这是一个例子。你用你的数组替换它。如果您不提供源代码,您将在答案中获得必须适应的示例。
    • 使用Items(或items)代替范围。
    • 试过 var SubRange = items。 (采取或跳过不存在)
    • 您必须包含 System.Linq 命名空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多