标签: random-access

将Quick BASIC转换为VB.Net - 随机访问文件

我正在尝试将旧的Quick BASIC程序转换为VB.Net.似乎没有任何直接替换旧文件语句.建立一个数据库对我的简单需求来说似乎有些过分.

如何在VB.Net中执行以下操作?

OPEN "test.dat" FOR RANDOM AS #1 LEN = 20
FIELD #1, 10 AS a$, 10 AS b$
LSET a$ = "One"
LSET b$ = "Two"
PUT #1, 1
GET #1, 1
PRINT a$, b$
CLOSE #1
Run Code Online (Sandbox Code Playgroud)

vb.net file random-access qbasic

3
推荐指数
1
解决办法
1384
查看次数

RandomAccess接口,为什么没有方法?

我正在阅读Collections.shuffle(List)javadoc,然后看看RandomAccess javadoc:

List实现使用的标记接口,表示它们支持快速(通常是恒定时间)随机访问.[...]

我想知道为什么这个接口(如Serializable)没有方法?这个的设计原因是什么?

即使只列出"实现"此接口,为什么不将E设置get()为方法呢?我知道并非每个列表都是随机访问,但如果没有方法,我该如何使用这个界面呢?

像这样的东西:

if(object instanceof RandomAccess){
    // should I cast it if no operations can be done? why?
}
Run Code Online (Sandbox Code Playgroud)

此外,只有列表可以是RandomAccess?文件怎么样?

java collections random-access

3
推荐指数
1
解决办法
2933
查看次数

在haskell中具有高性能的可变随机访问阵列/向量

这个关于Haskell的主题讨论了很多(例如可变数组实现),但我仍然不确定需要频繁修改和随机访问数组/向量的情况的最佳实践是什么.

说一个长度为1,000,000的向量.对其进行操作涉及基于输入访问其(小的,例如1000个)子集,并基于输入修改值.此外,这种操作重复2,000,000次.任务本身可以在纯数据结构中实现,例如列表,如下所示,尽管效率很低:

type Vect = [Int]

f :: Vect -> [[Int]] -> Vect
f x indsList = foldl g x indsList

-- g is just an example of random-access and modifications on the values.
g :: Vect -> [Int] -> Vect
g x inds = map h $ zip x [0..]
    where h (x, i) = if i `elem` inds then x !! i + 1 else x !! i
Run Code Online (Sandbox Code Playgroud)

散列/映射数据结构(例如IntMap)可以用于有效的大量随机访问,但是数组/向量也应该这样做.更重要的是,仍需要通过可变结构来解决大量修改以避免存储器复制.Haskell中是否存在可变的随机访问数组/向量?如果使用ST/IO Monads,这些控件会影响我的设置吗?

arrays haskell vector mutable random-access

3
推荐指数
1
解决办法
3348
查看次数

.NET列表上的随机访问速度很慢,但如果我总是引用第一个元素呢?

我知道,一般来说,.NET列表不适合随机访问.我总是被告知阵列最适合那个.我有一个程序需要不断(比如超过十亿次)访问.NET列表的第一个元素,我想知道这是否会减慢任何速度,或者它无关紧要因为它是第一个元素名单.我还做了很多其他的事情,比如在我进行的过程中添加和删除列表中的项目,但List永远不会是空的.

我正在使用F#,但我认为这适用于任何.NET语言(我使用.NET列表,而不是F#列表).我的列表大约有100个元素.

.net c# f# list random-access

3
推荐指数
1
解决办法
1475
查看次数

c#随机索引到数组的最快方法

我有一个双值"vals"数组,我需要随机索引到这个数组并获得一个值.GenRandomNumber()返回0和1,但从来没有0或1.我使用Convert.ToInt32基本上得到一切我小数点左边的数字,但必须有这样做的更有效的方法?

这是我的代码:

public double GetRandomVal()
{
   int z = Convert.ToInt32(GenRandomNumber() * (vals.Length));
   return vals[z];
}
Run Code Online (Sandbox Code Playgroud)

谢谢

更新

感谢所有回复的人,但我不得不使用提供方法rand.NextDouble()的MersenneTwister随机数实现

更新2

再考虑一下,我需要做的就是生成0和array.length-1之间的随机数,然后使用它随机索引到数组中.vals长度为2 ^ 20 = 1048576,因此生成随机int就足够了.我注意到我的MersenneTwister有一个方法:

public int Next(int maxValue)
Run Code Online (Sandbox Code Playgroud)

如果我把它称为vals [rand.Next(vals.length-1)]那应该做对吗?我也看到MersenneTwister有一个构造函数:

public MersenneTwister(int[] init)
Run Code Online (Sandbox Code Playgroud)

不知道这是为了什么,我可以用它来预先填充我提供0到vals.length数组的可接受的随机数吗?

FYI vals是一个长度为1048576的双重数组,用于划分正态分布曲线.我基本上使用这种机制来尽可能快地创建正态分布的数字,monte carlo模拟每天使用数十亿个正态分布的随机数,所以每一点都有帮助.

c# arrays random random-access

2
推荐指数
1
解决办法
9033
查看次数

RandomAccessFile内存泄漏

我在java中使用RandomAccessFile.我有内存泄漏问题.我已将代码简化为以下内容:

public static void main(String[] args) throws IOException, InterruptedException
{
    RandomAccessFile r = new RandomAccessFile(new File("test.dat"), "rw");
    r.write(new byte[150000000], 0, 150000000);
    r.getFD().sync();
    r.close();
    r = null;

    while (true) { Thread.sleep(1000); }
}
Run Code Online (Sandbox Code Playgroud)

执行此代码后(并为GC提供足够的时间),报告的应用程序内存使用量略高于150MB.

我错过了什么?还是Java应该受到责备?

java random-access

2
推荐指数
1
解决办法
939
查看次数

c ++列表随机访问

可能重复:
给定位置如何获取列表中的某个元素?

所以在python中你可以以随机访问方式获取列表中的元素....

list = [1,12,3]

print(list[1]) 
Run Code Online (Sandbox Code Playgroud)

它打印12 ....

你可以用c ++列表做同样的事情吗?

我在谈论这个:http://www.cplusplus.com/reference/stl/list/list/

c++ list random-access data-structures

2
推荐指数
1
解决办法
1万
查看次数

Java - 并行读取二进制文件

我有一个包含信息块的二进制文件(我将其称为数据包).每个数据包由一个固定长度的头和一个可变长度的主体组成.我要从包头本身确定身体的长度.我的任务是从文件中读取这些数据包并对它们执行一些操作.目前我正在执行以下任务:

  • 将文件作为随机访问文件打开并转到特定的开始位置(用户指定的起始位置).从这个位置读取第一个数据包.执行特定操作
  • 然后在循环中
    • 读下一个包
    • 执行我的操作这一直持续到文件标记结束.

你可以猜到,当文件大小很大时,连续读取每个数据包并处理它是一件非常耗时的事情.我想以某种方式并行化这个操作,即数据包生成操作,并将其放入一些阻塞队列,然后从队列中并行检索每个数据包并执行我的操作.

有人可以建议我如何并行生成这些数据包?

java file-io multithreading random-access

2
推荐指数
1
解决办法
1704
查看次数

通过索引访问矢量迭代器?

最近我在我的代码库中遇到了这个代码(当然是简化的)

auto toDelete = std::make_shared<std::string>("FooBar");
std::vector<decltype(toDelete)> myVec{toDelete};
auto iter = std::find_if(std::begin(myVec), std::end(myVec), 
   [](const decltype(toDelete) _next)
   {
      return *_next == "FooBar";
   });

if (iter != std::end(myVec))
{
   std::shared_ptr<std::string> deletedString = iter[0];
   std::cout << *deletedString;
   myVec.erase(iter);
}
Run Code Online (Sandbox Code Playgroud)

在线示例

现在,我注意到我们在这里通过索引访问迭代器!

std::shared_ptr<std::string> deletedString = iter[0];
Run Code Online (Sandbox Code Playgroud)

我以前从未见过有人通过索引访问迭代器,所以我可以猜到的是迭代器被视为指针,然后我们访问指向指针的第一个元素.那么代码实际上相当于:

std::shared_ptr<std::string> deletedString = *iter;
Run Code Online (Sandbox Code Playgroud)

或者是未定义的行为?

c++ iterator random-access dereference c++11

2
推荐指数
1
解决办法
1183
查看次数

随机访问 CSV 文件中的指定记录

这段代码工作正常:

            string[] lineOfContents = File.ReadAllLines(@"C:\users.csv");
            foreach (var line in lineOfContents)
            {
                string[] tokens = line.Split(',');
                if (tokens[2] == "ed@yahoo.com")
                {                    
                    MessageBox.Show("Email already exists");
                }
               else
               {
                   MessageBox.Show("Ok");
               }
            }
Run Code Online (Sandbox Code Playgroud)

上面的代码是这样工作的: 在此处输入图片说明

所以,我想用简单的代码对 CSV 文件中的“电子邮件”记录进行“直接访问”,如下所示: 在此处输入图片说明

c# csv random-access

1
推荐指数
1
解决办法
1143
查看次数